High speed data communication protocols are used to transfer large amounts of data at high speeds over a communications channel from a sending, or originating, terminal (sender) to a receiving terminal (receiver). The communications channel may include, for example, a switched or dedicated channel in a data communications network. Data communications networks may be classified by geographic scope, such as a local area network (LAN), which may be as small as a single room or as large as several buildings, or a wide area network (WAN), which may span hundreds of miles or more.
It may also be convenient to classify networks on a functional/logical basis. For example, a storage area network (SAN) is a network that provides access to high-speed storage devices. In many cases, a substantial portion of network traffic in an enterprise involves storing and/or retrieving large amounts of data from local or remote databases. A storage area network interconnects different kinds of data storage devices with associated data servers. A storage area network is usually located near the servers/users it serves, but may also include remote locations for physically secure archival storage, using wide area network protocols such as Asynchronous Transfer Mode (ATM) or Synchronous Optical Network (SONET).
High speed data communication protocols define an orderly process for setting up, using, and taking down (inactivating) a communications channel. Such protocols may be used to send data from one communications terminal to another over a wired and/or wireless communications channel. For example, high-speed data communications protocols may be used to send data from one communications terminal to another over a satellite and/or microwave communications link. High speed data communications protocols may be used to send data to/from a peripheral device, such as a mass storage device (e.g. a hard disk drive), a scanner, a camera, a printer, or the like, from/to a central processing unit of a computer. In that case, one of the communications terminals may include a host adapter (or host bus adapter), which is attached to both the central processing unit and the communications channel, and which mediates the use of the communications channel.
The transmission of data at high data rates over relatively long distances places additional demands on communications systems and protocols, as the distance between the sending and receiving terminals must be taken into account when determining channel capacity and/or utilization. For example, the latency between a sender and a receiver for communication over an optical fiber is about 5 μs per kilometer. That is, for each kilometer between sender and receiver, there is a 5 μs delay between sending a signal and receiving the signal. Thus, a 2 Gbit/s, 10 km long unidirectional link may hold up to 100 kbits bits in transit at any given moment, which means that a 10 kbit long message only occupies 1/10th of the available channel capacity. In certain low data rate communications protocols, after sending a message, a sending terminal may not send another message until it has received an acknowledgement (ACK) signal from the receiving terminal. In order to fully utilize a high speed channel, it may be desirable for a sending terminal to be able to send additional messages before an acknowledgement of the first message is received. This functionality may be provided/defined in the communications protocol.
Two data communications protocols that are commonly used to provide high speed data communications between mass storage devices and central processing units are Serial Attached SCSI (Small Computer Systems Interface) and Fibre Channel Arbitrated Loop.
In a high speed data communications protocol such as Serial Attached SCSI or Fibre Channel Arbitrated Loop, messages are usually divided into frames, which may have a frame size up to a maximum frame size (usually 1 or 2 kilobytes). Each side of the communications channel may maintain a receive buffer in which received frames are stored until they can be processed.
In order to permit multiple unacknowledged frames to be sent without causing buffer overruns, communications protocols typically use a system of buffer credits, also called buffer-to-buffer credits (BBCs). In buffer-credit flow control, the source (sending) and destination (receiving) communications terminals signal the availability of buffers by sending Receiver Ready primitives (RRDYs), each one of which signals the availability of a free frame buffer. A counter at each end keeps track of the number of RRDYs sent or received. The source port increments the number of transmit credits every time a RRDY is received and decrements the count each time a frame is sent (credit is used). The destination port increments a counter for every RRDY sent and decrements it for every frame received. The source port should not send frames unless it has positive credit. This may prevent loss of frames that may result from a buffer overrun. Some standards, such as Fibre Channel, allow some frames to be transmitted before RRDYs are received, by allowing some number of credits (non-zero initial credits) to be assumed to exist as soon as a connection is established through previous negotiations between the two ports. Non-zero initial buffer credits may improve utilization and throughput in data communications in a storage area network in which there are long spans between terminals.
As the length and/or throughput of a communications channel increases, the size of the receive buffer and the number of available buffer credits may be increased accordingly. However, such increases add to the complexity of the sending and receiving terminals. Not only is more memory space required for a larger buffer, but the number of bits required to address a particular frame may become larger, requiring more complex and/or time consuming address calculations in order to store a frame and/or access a stored frame.